bl_info = {
    "name": "Expression_Switcher",
    "author": "SiNan",
    "version": (1, 2, 0),
    "blender": (4, 5, 0),
    "location": "属性面板 > 材质 > Expression_Switcher",
    "description": "表情切换节点组工具 - 支持多对象控制",
    "warning": "",
    "doc_url": "https://gitee.com/sinanaaaa/Expression_Switcher",
    "category": "Material",
    "date": "2025-08-30"
}

import bpy
from bpy.types import  Panel
from bpy.props import  BoolProperty
from .node_group import *
from .sequence import *
from .position_xy import *



class NODE_PT_FACE_CHANGE_TOOLS(Panel):
    bl_label = "表情切换工具"
    bl_idname = "NODE_PT_FACE_CHANGE_TOOLS"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'UI'
    bl_category = "Expression_Switcher"
    
    def draw(self, context):
        layout = self.layout
        box = layout.box()
        box.split(factor=0.33)
        col= box.column()
        
        # 添加创建按钮
        col.operator("node.create_face_change_group", icon='ADD')
        col.operator("node.material_sequence", icon='ADD')
        col.operator("material.select_image", icon='ADD')

        # 添加可折叠的使用说明
        box = layout.box()
        row = box.row()
        row.prop(context.scene, "expression_switcher_show_help", 
                icon="TRIA_DOWN" if context.scene.expression_switcher_show_help else "TRIA_RIGHT", 
                icon_only=True, emboss=False)
        row.label(text="使用说明:", icon='INFO')
        if context.scene.expression_switcher_show_help:
            col = box.column(align=True)
            
            # 创建帮助文本
            help_text = """一. 节点群组
1. 勾选要使用的UV贴图设置表情数量
2. 设置节点组名称并创建节点组
3. Ctrl+A 添加节点组到着色器编辑器
4. 在材质属性面板中找到群组表情切换
5. 点击刷新
6. 选择节点组并设置表情索引

二.图像序列
1. 选择一个或多个物体点击图像序列
2. 设置材质名称参数
3. 选择图像序列并创建材质
4. 控制驱动物体位置切换表情
多个物体时，活动项将被设为驱动物体
单个物体时，将自动根据该物体属性
添加材质或者将其设为驱动物体
除活动项外的被选择项如果为非网格物体将被忽略

三. 位置变换
1. 选择需要添加材质的网格物体
2. 选择图片
3. 确定后在材质属性面板中找到位置表情切换
4. 首先调整起始位置对准第一行第一列的表情
5. 行列值X设为1，调整间距X对准第一行第二个表情
6. 行列值X设为0行列值Y设为1，调整间距Y对准第一列第二个表情
7. 到此间距及初始位置设置完成，调整行列值即可切换表情

## 注意事项

- 确保模型具有正确的UV贴图设置
- 图像序列文件应按顺序命名以确保正确排序
- 位置变换模式需要仔细调整起始点和间距参数
- 插件适用于Blender 4.5及以上版本
- 当切换活动节点组时，会自动选中使用该节点组的所有物体和节点

## 常见问题

**Q: 为什么看不到节点组?**
A: 确保已经正确安装插件，并且在材质属性面板中点击了刷新按钮。

**Q: 表情切换没有效果?**
A: 检查节点组是否正确连接到材质网络，并确认UV贴图设置正确,且切换时必须选中是使用该节点的物体。

**Q: 图像序列不播放?**
A: 插件通过函数设置保证了序列偏移仅受驱动物体位置影响，播放不会改变帧。

**Q: 位置变换不准?**
A: 选择合适倍数或确保起始位置与行列间距设置正确，保证使用表情在图片中阵列排布。
"""
            # 使用文本框显示帮助信息，启用自动换行
            help_lines = help_text.split('\n')
            for line in help_lines:
                col.label(text=line)



def register():
    from bpy.utils import register_class
    
    register_class(NODE_PT_FACE_CHANGE_TOOLS)
    
    # 添加控制面板展开/折叠的属性
    bpy.types.Scene.expression_switcher_show_help = BoolProperty(
        name="显示帮助",
        description="展开或折叠帮助面板",
        default=False,
    )
    
    sequence_register()
    node_group_register()
    xy_register()
    
    print("Expression_Switcher Registered")


def unregister():
    from bpy.utils import unregister_class
    
    unregister_class(NODE_PT_FACE_CHANGE_TOOLS)
    
    sequence_unregister()
    node_group_unregister()
    xy_unregister()
    
    print("Expression_Switchers Unregistered")

if __name__ == "__main__":
    register()